package com.qf.controller;

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.impl.UserServiceImpl;
import com.qf.utils.Constants;
import com.qf.utils.StrUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @author 29125
 * @version V1.0
 * @Project java2203
 * @Package com.qf.controller
 * @Description:消费者用户登录等操作
 * @Date 2022/5/23 14:18
 */
@WebServlet("/user")
public class UserController extends BaseServlet {
    //用户注册：校验用户名是否可用  register.jsp中第16行&method=check 则方法名是check
    public void check(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //获取参数
        String username = request.getParameter("username");
        //调用service层方法，判断用户是否可用
        UserService userService=new UserServiceImpl();
        boolean check = userService.check(username);
        if (check){
            //用户名可用，没有被使用过
            response.getWriter().write(Constants.NOT_HAS_USER);
        }else {
            //用户名不可用，响应得到使用过的参数
            response.getWriter().write(Constants.HAS_USER);
        }
    }

    //消费者用户登录  方法名根据login中的36行action中的method=login
    public String login(HttpServletRequest request,HttpServletResponse response){
        //获取参数   login.jsp登录页面中用户登录45~63行中的name内容
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String code = request.getParameter("code");
        String auto = request.getParameter("auto");

        //非空验证
        if (!StrUtils.empty(username)||!StrUtils.empty(password)||!StrUtils.empty(code)){
            request.setAttribute("msg","用户名，密码，验证码不能为空！");
            //forward是因为BaseServlet中封装的方法
            return "forward:/login.jsp";
        }
        //校验验证码，不正确重定向到登录页面
        //从session中获取code
        String sessionCode = (String) request.getSession().getAttribute("code");
        if (!code.equalsIgnoreCase(sessionCode)){
            //忽略大小写，code和sessionCode不等，将用户名，密码保留，提示验证码错误并重定向到登录页面
            request.setAttribute("userName",username);
            request.setAttribute("password",password);
            request.setAttribute("msg","验证码错误！");
            //跳转到登录页面
            return "forward:/login.jsp";
        }
        //校验用户名和密码  调用service层方法
        UserService userService=new UserServiceImpl();
        User user = userService.login(username, password);
        if (user==null){
            request.setAttribute("userName",username);
            request.setAttribute("password",password);
            request.setAttribute("msg","用户名或密码错误！");
            //跳转到登录页面
            return "forward:/login.jsp";
        }
        //以上没有问题，登录成功，并将用户信息存入session中
        request.getSession().setAttribute("loginUser",user);
        //登录成功，自动登录设置  login.jsp自动登录设置value值可以进行判断是否自动登录
        if ("on".equals(auto)){
            //自动登录，创建cookie,cookie路径和保存时间
            Cookie cookie=new Cookie(Constants.AUTO_NAME,user.getUsername());
            cookie.setPath("/");
            cookie.setMaxAge(60*60*2*14);//最长保存两周
            //通过响应将cookie数据写回到浏览器中保存
            response.addCookie(cookie);
        }
        //登录成功，存入session，设置好cookie，重定向跳转到首页
        return "redirect:/goods?method=index";
    }

    //消费者用户注册
    public String register(HttpServletRequest request,HttpServletResponse response) throws Exception {
        //将消费者所有属性构成一个map，统一操作
        Map<String, String[]> parameterMap = request.getParameterMap();
        //将参数封装成User对象
        User user=new User();
        //使用beanUtils工具类，将map中的数据自动set到map对象中
        BeanUtils.populate(user,parameterMap);//抛异常

        //调用service层方法，用户保存到数据库用户表中
        UserService userService=new UserServiceImpl();
        int count = userService.createUser(user);
        //count存在>0即注册成功
        if (count>0){
            return "redirect:/registerSuccess.jsp";
        }else {
            return "redirect:/register.jsp";
        }
    }
    //注销消费者用户
//    public String logOut(HttpServletRequest request,HttpServletResponse response){
//
//    }
}
